add _gtk_tree_view_column_get_editable_cell and
authorKristian Rietveld <kris@gtk.org>
Sun, 14 Apr 2002 15:05:04 +0000 (15:05 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Sun, 14 Apr 2002 15:05:04 +0000 (15:05 +0000)
Sun Apr 14 16:56:59 2002  Kristian Rietveld  <kris@gtk.org>

        * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
        _gtk_tree_view_column_get_neighbor_sizes

        * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
        real_width field,
        (_gtk_tree_view_column_get_editable_cell): implement,
        (gtk_tree_view_column_cell_process_action): fill info->real_width
        (_gtk_tree_view_column_get_neighbor_sizes): implement

        * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
        widget" show up with the same size as the actual cell, so it doesnt
        cover the complete column if there are any other cells in that column.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktreeprivate.h
gtk/gtktreeview.c
gtk/gtktreeviewcolumn.c

index 5f53cfd1b53b282a2f094d46bac0db85f3b2532d..d7fd25fd7fd80e6adb1192734c9fa8a8b2092a16 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+       _gtk_tree_view_column_get_neighbor_sizes
+
+       * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+       real_width field,
+       (_gtk_tree_view_column_get_editable_cell): implement,
+       (gtk_tree_view_column_cell_process_action): fill info->real_width
+       (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+       * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+       widget" show up with the same size as the actual cell, so it doesnt
+       cover the complete column if there are any other cells in that column.
+
 2002-04-14  Abigail Brady  <morwen@evilmagic.org>
 
        * gtk/gtkfilesel.c: Fix typo in message.
index 5f53cfd1b53b282a2f094d46bac0db85f3b2532d..d7fd25fd7fd80e6adb1192734c9fa8a8b2092a16 100644 (file)
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+       _gtk_tree_view_column_get_neighbor_sizes
+
+       * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+       real_width field,
+       (_gtk_tree_view_column_get_editable_cell): implement,
+       (gtk_tree_view_column_cell_process_action): fill info->real_width
+       (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+       * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+       widget" show up with the same size as the actual cell, so it doesnt
+       cover the complete column if there are any other cells in that column.
+
 2002-04-14  Abigail Brady  <morwen@evilmagic.org>
 
        * gtk/gtkfilesel.c: Fix typo in message.
index 5f53cfd1b53b282a2f094d46bac0db85f3b2532d..d7fd25fd7fd80e6adb1192734c9fa8a8b2092a16 100644 (file)
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+       _gtk_tree_view_column_get_neighbor_sizes
+
+       * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+       real_width field,
+       (_gtk_tree_view_column_get_editable_cell): implement,
+       (gtk_tree_view_column_cell_process_action): fill info->real_width
+       (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+       * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+       widget" show up with the same size as the actual cell, so it doesnt
+       cover the complete column if there are any other cells in that column.
+
 2002-04-14  Abigail Brady  <morwen@evilmagic.org>
 
        * gtk/gtkfilesel.c: Fix typo in message.
index 5f53cfd1b53b282a2f094d46bac0db85f3b2532d..d7fd25fd7fd80e6adb1192734c9fa8a8b2092a16 100644 (file)
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+       _gtk_tree_view_column_get_neighbor_sizes
+
+       * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+       real_width field,
+       (_gtk_tree_view_column_get_editable_cell): implement,
+       (gtk_tree_view_column_cell_process_action): fill info->real_width
+       (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+       * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+       widget" show up with the same size as the actual cell, so it doesnt
+       cover the complete column if there are any other cells in that column.
+
 2002-04-14  Abigail Brady  <morwen@evilmagic.org>
 
        * gtk/gtkfilesel.c: Fix typo in message.
index 5f53cfd1b53b282a2f094d46bac0db85f3b2532d..d7fd25fd7fd80e6adb1192734c9fa8a8b2092a16 100644 (file)
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+       _gtk_tree_view_column_get_neighbor_sizes
+
+       * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+       real_width field,
+       (_gtk_tree_view_column_get_editable_cell): implement,
+       (gtk_tree_view_column_cell_process_action): fill info->real_width
+       (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+       * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+       widget" show up with the same size as the actual cell, so it doesnt
+       cover the complete column if there are any other cells in that column.
+
 2002-04-14  Abigail Brady  <morwen@evilmagic.org>
 
        * gtk/gtkfilesel.c: Fix typo in message.
index 5f53cfd1b53b282a2f094d46bac0db85f3b2532d..d7fd25fd7fd80e6adb1192734c9fa8a8b2092a16 100644 (file)
@@ -1,3 +1,18 @@
+Sun Apr 14 16:56:59 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_editable_cell and
+       _gtk_tree_view_column_get_neighbor_sizes
+
+       * gtk/gtktreeviewcolumn.c (struct _GtkTreeViewColumnCellInfo): add
+       real_width field,
+       (_gtk_tree_view_column_get_editable_cell): implement,
+       (gtk_tree_view_column_cell_process_action): fill info->real_width
+       (_gtk_tree_view_column_get_neighbor_sizes): implement
+
+       * gtk/gtktreeview.c (gtk_tree_view_button_press): make the "editable
+       widget" show up with the same size as the actual cell, so it doesnt
+       cover the complete column if there are any other cells in that column.
+
 2002-04-14  Abigail Brady  <morwen@evilmagic.org>
 
        * gtk/gtkfilesel.c: Fix typo in message.
index 0d101cf704b6eb67dc6a79c4bc11a4168447bde4..868d5cd4b7d44c40ff2dad827cd6b181a6e14dc4 100644 (file)
@@ -312,7 +312,8 @@ void _gtk_tree_view_column_start_editing (GtkTreeViewColumn *tree_column,
                                          GtkCellEditable   *editable_widget);
 void _gtk_tree_view_column_stop_editing  (GtkTreeViewColumn *tree_column);
 void _gtk_tree_view_install_mark_rows_col_dirty (GtkTreeView *tree_view);                                       
-gboolean _gtk_tree_view_column_has_editable_cell (GtkTreeViewColumn *column);
+gboolean         _gtk_tree_view_column_has_editable_cell (GtkTreeViewColumn *column);
+GtkCellRenderer *_gtk_tree_view_column_get_editable_cell (GtkTreeViewColumn *column);
 
 GtkTreeSelection* _gtk_tree_selection_new                (void);
 GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView      *tree_view);
@@ -335,6 +336,10 @@ void                 _gtk_tree_view_column_cell_draw_focus  (GtkTreeViewColumn *tree_column,
                                                          guint              flags);
 void             _gtk_tree_view_column_cell_set_dirty   (GtkTreeViewColumn *tree_column,
                                                          gboolean           install_handler);
+void              _gtk_tree_view_column_get_neighbor_sizes (GtkTreeViewColumn *column,
+                                                           GtkCellRenderer   *cell,
+                                                           gint              *left,
+                                                           gint              *right);
 
 
 #ifdef __cplusplus
index 5d4b8704422244c27b9efa5cc0ab6caf66a513ae..6e915d8d5b280e354e2226101450982c355adb16 100644 (file)
@@ -1794,6 +1794,14 @@ gtk_tree_view_button_press (GtkWidget      *widget,
          tree_view->priv->cursor)
        {
          GtkTreePath *cursor = gtk_tree_row_reference_get_path (tree_view->priv->cursor);
+         GtkTreeIter iter;
+
+         gtk_tree_model_get_iter (tree_view->priv->model, &iter, path);
+         gtk_tree_view_column_cell_set_cell_data (column,
+                                                  tree_view->priv->model,
+                                                  &iter,
+                                                  GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
+                                                  node->children?TRUE:FALSE);
 
          if ((cursor && !gtk_tree_path_compare (cursor, path))
              || !_gtk_tree_view_column_has_editable_cell (column))
@@ -1802,14 +1810,6 @@ gtk_tree_view_button_press (GtkWidget      *widget,
 
              /* FIXME: get the right flags */
              guint flags = 0;
-             GtkTreeIter iter;
-
-             gtk_tree_model_get_iter (tree_view->priv->model, &iter, path);
-             gtk_tree_view_column_cell_set_cell_data (column,
-                                                      tree_view->priv->model,
-                                                      &iter,
-                                                      GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
-                                                      node->children?TRUE:FALSE);
 
              path_string = gtk_tree_path_to_string (path);
 
@@ -1822,11 +1822,20 @@ gtk_tree_view_button_press (GtkWidget      *widget,
                {
                  if (cell_editable != NULL)
                    {
+                     gint left, right;
+                     GdkRectangle area;
+
+                     area = cell_area;
+                     _gtk_tree_view_column_get_neighbor_sizes (column, _gtk_tree_view_column_get_editable_cell (column), &left, &right);
+
+                     area.x += left;
+                     area.width -= right + left;
+
                      gtk_tree_view_real_start_editing (tree_view,
                                                        column,
                                                        path,
                                                        cell_editable,
-                                                       &cell_area,
+                                                       &area,
                                                        (GdkEvent *)event,
                                                        flags);
                      gtk_tree_path_free (path);
@@ -1840,6 +1849,7 @@ gtk_tree_view_button_press (GtkWidget      *widget,
          if (cursor)
            gtk_tree_path_free (cursor);
        }
+
       /* select */
       pre_val = tree_view->priv->vadjustment->value;
 
index 4317c890f555cb710605e19943cd6d24cc11ea0c..c2e5b2e0f4a32df4df38734be795a94ed33cf4d1 100644 (file)
@@ -64,6 +64,7 @@ struct _GtkTreeViewColumnCellInfo
   gpointer func_data;
   GtkDestroyNotify destroy;
   gint requested_width;
+  gint real_width;
   guint expand : 1;
   guint pack : 1;
   guint has_focus : 1;
@@ -1053,6 +1054,19 @@ _gtk_tree_view_column_has_editable_cell (GtkTreeViewColumn *column)
   return FALSE;
 }
 
+GtkCellRenderer *
+_gtk_tree_view_column_get_editable_cell (GtkTreeViewColumn *column)
+{
+  GList *list;
+
+  for (list = column->cell_list; list; list = list ->next)
+    if (((GtkTreeViewColumnCellInfo *)list->data)->cell->mode ==
+       GTK_CELL_RENDERER_MODE_EDITABLE)
+      return ((GtkTreeViewColumnCellInfo *)list->data)->cell;
+
+  return NULL;
+}
+
 /* Public Functions */
 
 
@@ -2349,6 +2363,7 @@ gtk_tree_view_column_cell_process_action (GtkTreeViewColumn  *tree_column,
 
       real_cell_area.width = info->requested_width +
        (info->expand?extra_space:0);
+      info->real_width = real_cell_area.width;
       real_cell_area.x += focus_line_width;
       if (action == CELL_ACTION_RENDER)
        {
@@ -2447,6 +2462,7 @@ gtk_tree_view_column_cell_process_action (GtkTreeViewColumn  *tree_column,
 
       real_cell_area.width = info->requested_width +
        (info->expand?extra_space:0);
+      info->real_width = real_cell_area.width;
       if (action == CELL_ACTION_RENDER)
        {
          gtk_cell_renderer_render (info->cell,
@@ -2698,3 +2714,55 @@ _gtk_tree_view_column_stop_editing (GtkTreeViewColumn *tree_column)
 
   tree_column->editable_widget = NULL;
 }
+
+void
+_gtk_tree_view_column_get_neighbor_sizes (GtkTreeViewColumn *column,
+                                         GtkCellRenderer   *cell,
+                                         gint              *left,
+                                         gint              *right)
+{
+  GList *list;
+
+  if (left)
+    {
+      *left = 0;
+
+      for (list = column->cell_list; list; list = list->next)
+        {
+         GtkTreeViewColumnCellInfo *info =
+           (GtkTreeViewColumnCellInfo *)list->data;
+
+         if (info->cell == cell)
+           break;
+
+         *left += info->real_width;
+       }
+    }
+
+  if (right)
+    {
+      *right = 0;
+
+      for (list = column->cell_list; list; list = list->next)
+        {
+         GtkTreeViewColumnCellInfo *info =
+           (GtkTreeViewColumnCellInfo *)list->data;
+
+         if (info->cell == cell)
+           break;
+       }
+
+      /* skip cell */
+      if (list && list->next)
+        {
+         list = list->next;
+         for ( ; list; list = list->next)
+           {
+             GtkTreeViewColumnCellInfo *info =
+               (GtkTreeViewColumnCellInfo *)list->data;
+
+             *right += info->real_width;
+           }
+       }
+    }
+}